<!DOCTYPE html>
<html>

  <head>
  <meta charset="utf-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">

  <title>GcsSloop</title>
  <meta name="description" content="嗨，我是 GcsSloop，一名来自2.5次元的魔法师，Android自定义View系列文章作者，非著名程序员。">
  <meta name="author" content="GcsSloop">
  <meta name="keywords" content="">
  <meta name="关键字" content="">
  

  <meta name="twitter:card" content="summary">
  <meta name="twitter:title" content="GcsSloop">
  <meta name="twitter:description" content="嗨，我是 GcsSloop，一名来自2.5次元的魔法师，Android自定义View系列文章作者，非著名程序员。">
  <meta name="twitter:keywords" content="">
  
  <meta property="og:type" content="article">
  <meta property="og:title" content="GcsSloop">
  <meta property="og:description" content="嗨，我是 GcsSloop，一名来自2.5次元的魔法师，Android自定义View系列文章作者，非著名程序员。">
  <meta name="og:keywords" content="">

  <meta name="theme-color" content="#343434">
  
  <link rel="icon" type="image/png" href="https://raw.githubusercontent.com/GcsSloop/gcssloop.github.io/master/assets/siteinfo/favicon.png" />
  <link href="https://raw.githubusercontent.com/GcsSloop/gcssloop.github.io/master/assets/siteinfo/favicon.png" rel="shortcut icon" type="image/png">
  
  <link href="//netdna.bootstrapcdn.com/font-awesome/4.4.0/css/font-awesome.min.css" rel="stylesheet">
  <link rel="stylesheet" href="/css/main.css">

  <link rel="canonical" href="http://www.gcssloop.com/page/4/">
  <link rel="alternate" type="application/rss+xml" title="GcsSloop" href="http://www.gcssloop.com/feed.xml">
  
  <meta name="google-site-verification" content="Z_g58PkzRAyBMxkqrcDdWrTBK8oOWM-7rUHauhLNF2E" />
  <meta name="baidu-site-verification" content="kUtTXCKaZs" />
  <meta name="baidu-site-verification" content="6DuDv3aaJX" />
  
  <!--阅读次数统计-->
  <script async src="https://busuanzi.ibruce.info/busuanzi/2.3/busuanzi.pure.mini.js"> </script>
  
  <!--Fuck Weixin and Baidu-->
  <meta http-equiv="Cache-Control" content="no-transform">
  <meta http-equiv=”Cache-Control” content=”no-siteapp” />
  <meta name="applicable-device" content="pc,mobile">
  <meta name="HandheldFriendly" content="true"/>

  <!-- Google Ad -->
  <script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
  <script>
    (adsbygoogle = window.adsbygoogle || []).push({
      google_ad_client: "ca-pub-2767831356529421",
      enable_page_level_ads: true
    });
  </script>

</head>


  <body>

    <span class="mobile btn-mobile-menu">
        <i class="fa fa-list btn-mobile-menu__icon"></i>
        <i class="fa fa-angle-up btn-mobile-close__icon hidden"></i>
    </span>
    
    <header class="panel-cover " style="background-image: url('/assets/siteinfo/background-cover.jpg')">
  <div class="panel-main">

    <div class="panel-main__inner panel-inverted">
    <div class="panel-main__content">

        <a href="/#blog" title="前往 GcsSloop 的主页" class="blog-button"><img src="/assets/siteinfo/avatar.jpg" width="80" alt="GcsSloop logo" class="panel-cover__logo logo" /></a>
        <h1 class="panel-cover__title panel-title"><a href="/#blog" title="link to homepage for GcsSloop" class="blog-button">GcsSloop</a></h1>

        
        <span class="panel-cover__subtitle panel-subtitle">Just do IT later.</span>
        
        <hr class="panel-cover__divider" />
        <p class="panel-cover__description">嗨，我是 GcsSloop，一名来自2.5次元的魔法师，Android自定义View系列文章作者，非著名程序员。</p>
        <hr class="panel-cover__divider panel-cover__divider--secondary" />
        
        
        <p class="panel-cover__description">欢迎来到我的魔法世界!</p>
        
        
        <div class="navigation-wrapper">
          <div>
            <nav class="cover-navigation cover-navigation--primary">
              <ul class="navigation">
                <li class="navigation__item"><a href="/#blog" title="访问博客" class="blog-button">博客</a></li>
                
                  
                    <li class="navigation__item"><a href="https://github.com/GcsSloop" target="_blank" title="GcsSloop's GitHub">GitHub</a></li>
                  
                  
                
                  
                    <li class="navigation__item"><a href="/timeline" title="博客目录">目录</a></li>
                  
                  
                
                  
                    <li class="navigation__item"><a href="https://xiaozhuanlan.com/u/GcsSloop" target="_blank" title="小专栏">专栏</a></li>
                  
                  
                
                  
                    <li class="navigation__item"><a href="/category/customview" title="自定义View教程目录">自定义控件</a></li>
                  
                  
                
                  
                    <li class="navigation__item"><a href="/friends" title="友链">友链</a></li>
                  
                  
                
              </ul>
            </nav>
          </div>
          
          <div><nav class="cover-navigation navigation--social">
  <ul class="navigation">

  
  <!-- Weibo -->
  <li class="navigation__item">
    <a href="http://weibo.com/GcsSloop" title="@GcsSloop 的微博" target="_blank">
      <i class='social fa fa-weibo'></i>
      <span class="label">Weibo</span>
    </a>
  </li>
  

  
  <!-- Github -->
  <li class="navigation__item">
    <a href="https://github.com/GcsSloop" title="@GcsSloop 的 Github" target="_blank">
      <i class='social fa fa-github'></i>
      <span class="label">Github</span>
    </a>
  </li>
  
  
  
  <!-- Twitter -->
  <li class="navigation__item">
    <a href="http://twitter.com/GcsSloop" title="@GcsSloop" target="_blank">
      <i class='social fa fa-twitter'></i>
      <span class="label">Twitter</span>
    </a>
  </li>
  

    

  

  
  <!-- RSS -->
  <li class="navigation__item">
    <a href="/feed.xml" rel="author" title="RSS" target="_blank">
      <i class='social fa fa-rss'></i>
      <span class="label">RSS</span>
    </a>
  </li>
  

  
  <!-- Email -->
  <li class="navigation__item">
    <a href="mailto:GcsSloop@gmail.com" title="发邮件给我">
      <i class='social fa fa-envelope'></i>
      <span class="label">Email</span>
    </a>
  </li>
  

  
  <!-- Copyright -->
  <li class="navigation__item">
    <a href="http://choosealicense.online" title="选择版权"  target="_blank">
      <i class="social fa fa-copyright"></i>
      <span class="label">版权</span>
    </a>
  </li>
  
  
  </ul>
</nav>
</div>
        </div>
      </div>
    </div>
    
    
    <div class="panel-cover--overlay cover-slate"></div>
    
  </div>
</header>


    <div class="content-wrapper">
        <div class="content-wrapper__inner">
            <div class="main-post-list hidden">

  <ol class="post-list">
    <!--目录-->
    
    <!--置顶-->
    
      
    
      
    
      
    
      
    
      
    
      
    
      
    
      
    
      
    
      
    
      
    
      
    
      
    
      
    
      
    
      
    
      
    
      
    
      
    
      
    
      
    
      
    
      
    
      
    
      
    
      
    
      
    
      
    
      
    
      
    
      
    
      
    
      
    
      
    
      
    
      
    
      
    
      
    
      
    
      
    
      
    
      
    
      
    
      
    
      
    
      
    
      
    
      
    
      
    
      
    
      
    
    <!--普通文档流-->
    
    
      <li>
          <!--正常文档-->
          
          <h2 class="post-list__post-title post-title"><a href="/course/jitpack-sources-javadoc" title="访问 用JitPack发布开源库时附加文档和源码">用JitPack发布开源库时附加文档和源码</a></h2>
          <p class="excerpt">很早之前写过一篇用JitPack发布Android开源库的文章，有小伙伴反馈说发布到JitPack上的开源库没有文档注释，使用起来很不方便，这是我的失误，上一篇文章只是讲解了如何使用JitPack发布开源库，最终发布的只有arr(即编译好的动态链接库)，不仅没有文档注释(Javadoc)，也没有源码(sources)，本次就教大家如何在发布同时添加上注释和源码。由于JitPack本身就是一个自定义Maven仓库，所以与上传Maven的配置方式基本一样。配置项目的 build.gradle项目的 build.g...&hellip;</p>
          <div class="post-list__meta"><time datetime="2016-09-09 00:00:00 +0800" class="post-list__meta--date date">2016-09-09</time> &#8226; <span class="post-list__meta--tags tags">Course</span> <a class="btn-border-small" href=/course/jitpack-sources-javadoc>继续阅读</a></div>
          <hr class="post-list__divider" />
          
      </li>
    
    
    
      <li>
          <!--正常文档-->
          
          <h2 class="post-list__post-title post-title"><a href="/customview/Matrix_Method" title="访问 安卓自定义View进阶-Matrix详解">安卓自定义View进阶-Matrix详解</a></h2>
          <p class="excerpt">这应该是目前最详细的一篇讲解Matrix的中文文章了，在上一篇文章Matrix原理中，我们对Matrix做了一个简单的了解，偏向理论，在本文中则会详细的讲解Matrix的具体用法，以及与Matrix相关的一些实用技巧。  ⚠️ 警告：测试本文章示例之前请关闭硬件加速。Matrix方法表按照惯例，先放方法表做概览。            方法类别      相关API      摘要                  基本方法      equals hashCode toString toShortStrin...&hellip;</p>
          <div class="post-list__meta"><time datetime="2016-08-30 00:00:00 +0800" class="post-list__meta--date date">2016-08-30</time> &#8226; <span class="post-list__meta--tags tags">CustomView</span> <a class="btn-border-small" href=/customview/Matrix_Method>继续阅读</a></div>
          <hr class="post-list__divider" />
          
      </li>
    
    
    
      <li>
          <!--正常文档-->
          
          <h2 class="post-list__post-title post-title"><a href="/tips/arratlist-linkedlist-performance" title="访问 ArrayList与LinkedList遍历性能比较">ArrayList与LinkedList遍历性能比较</a></h2>
          <p class="excerpt">用实例测试ArrayList与LinkedList遍历性能。结构差别:我们常用的List有两种，ArrayList和LinkedList，虽然两者都是LIst，但由于内部存储结构的不同，使用不同的遍历方法性能却是千差万别的。            List      存储结构      特点                  ArrayList      数组结构      可以根据下标直接取值。              LinkedList      链表结构      如果需要寻找某一个下标的数值必须从...&hellip;</p>
          <div class="post-list__meta"><time datetime="2016-08-21 00:00:00 +0800" class="post-list__meta--date date">2016-08-21</time> &#8226; <span class="post-list__meta--tags tags">Tips</span> <a class="btn-border-small" href=/tips/arratlist-linkedlist-performance>继续阅读</a></div>
          <hr class="post-list__divider" />
          
      </li>
    
    
    
      <li>
          <!--正常文档-->
          
          <h2 class="post-list__post-title post-title"><a href="/customview/Matrix_Basic" title="访问 安卓自定义View进阶-Matrix原理">安卓自定义View进阶-Matrix原理</a></h2>
          <p class="excerpt">本文内容偏向理论，和 画布操作 有重叠的部分，本文会让你更加深入的了解其中的原理。本篇的主角Matrix，是一个一直在后台默默工作的劳动模范，虽然我们所有看到View背后都有着Matrix的功劳，但我们却很少见到它，本篇我们就看看它是何方神圣吧。  由于Google已经对这一部分已经做了很好的封装，所以跳过本部分对实际开发影响并不会太大，不想深究的粗略浏览即可，下一篇中将会详细讲解Matrix的具体用法和技巧。  ⚠️ 警告：测试本文章示例之前请关闭硬件加速。Matrix简介Matrix是一个矩阵，主要功能是...&hellip;</p>
          <div class="post-list__meta"><time datetime="2016-08-03 00:00:00 +0800" class="post-list__meta--date date">2016-08-03</time> &#8226; <span class="post-list__meta--tags tags">CustomView</span> <a class="btn-border-small" href=/customview/Matrix_Basic>继续阅读</a></div>
          <hr class="post-list__divider" />
          
      </li>
    
    
    
      <li>
          <!--正常文档-->
          
          <h2 class="post-list__post-title post-title"><a href="/customview/Path_PathMeasure" title="访问 安卓自定义View进阶-PathMeasure">安卓自定义View进阶-PathMeasure</a></h2>
          <p class="excerpt">可以看到，在经过 Path之基本操作Path之贝塞尔曲线 和 Path之完结篇 后， Path中各类方法基本上都讲完了，表格中还没有讲解到到方法就是矩阵变换了，难道本篇终于要讲矩阵了？非也，矩阵这一部分仍在后面单独讲解，本篇主要讲解 PathMeasure 这个类与 Path 的一些使用技巧。  PS：不要问我为什么不讲 PathEffect，因为这个方法在后面的Paint系列中。先放一个图镇楼，省的下面无聊的内容把你们都吓跑了Σ(￣。￣ﾉ)ﾉPath &amp; PathMeasure顾名思义，PathMe...&hellip;</p>
          <div class="post-list__meta"><time datetime="2016-06-02 00:00:00 +0800" class="post-list__meta--date date">2016-06-02</time> &#8226; <span class="post-list__meta--tags tags">CustomView</span> <a class="btn-border-small" href=/customview/Path_PathMeasure>继续阅读</a></div>
          <hr class="post-list__divider" />
          
      </li>
    
    
    
      <li>
          <!--正常文档-->
          
          <h2 class="post-list__post-title post-title"><a href="/customview/Path_Over" title="访问 安卓自定义View进阶-Path之完结篇">安卓自定义View进阶-Path之完结篇</a></h2>
          <p class="excerpt">经历过前两篇 Path之基本操作 和 Path之贝塞尔曲线 的讲解，本篇终于进入Path的收尾篇，本篇结束后Path的大部分相关方法都已经讲解完了，但Path还有一些更有意思的玩法，应该会在后续的文章中出现。一.Path常用方法表  为了兼容性(偷懒) 本表格中去除了在API21(即安卓版本5.0)以上才添加的方法。忍不住吐槽一下，为啥看起来有些顺手就能写的重载方法要等到API21才添加上啊。宝宝此刻内心也是崩溃的。            作用      相关方法      备注               ...&hellip;</p>
          <div class="post-list__meta"><time datetime="2016-05-02 00:00:00 +0800" class="post-list__meta--date date">2016-05-02</time> &#8226; <span class="post-list__meta--tags tags">CustomView</span> <a class="btn-border-small" href=/customview/Path_Over>继续阅读</a></div>
          <hr class="post-list__divider" />
          
      </li>
    
    
    
      <li>
          <!--正常文档-->
          
          <h2 class="post-list__post-title post-title"><a href="/customview/Path_Bezier" title="访问 安卓自定义View进阶-Path之贝塞尔曲线">安卓自定义View进阶-Path之贝塞尔曲线</a></h2>
          <p class="excerpt">在上一篇文章Path之基本操作中我们了解了Path的基本使用方法，本次了解Path中非常非常非常重要的内容-贝塞尔曲线。一.Path常用方法表  为了兼容性(偷懒) 本表格中去除了在API21(即安卓版本5.0)以上才添加的方法。忍不住吐槽一下，为啥看起来有些顺手就能写的重载方法要等到API21才添加上啊。宝宝此刻内心也是崩溃的。            作用      相关方法      备注                  移动起点      moveTo      移动下一次操作的起点位置       ...&hellip;</p>
          <div class="post-list__meta"><time datetime="2016-04-29 00:00:00 +0800" class="post-list__meta--date date">2016-04-29</time> &#8226; <span class="post-list__meta--tags tags">CustomView</span> <a class="btn-border-small" href=/customview/Path_Bezier>继续阅读</a></div>
          <hr class="post-list__divider" />
          
      </li>
    
    
    
      <li>
          <!--正常文档-->
          
          <h2 class="post-list__post-title post-title"><a href="/course/PublishLibraryByJitPack" title="访问 使用JitPack发布Android开源库">使用JitPack发布Android开源库</a></h2>
          <p class="excerpt">自从谷歌宣布不支持Eclipse之后，大批Android程序猿情愿或者不情愿的迁移到了AndroidStudio，从此过上了使用Gradle构建程序的”优越”生活。  关于Gradle的坑，就不吐槽了，我怕一会儿控制不住情绪。今天我们就谈一下Gradle的优越性。说到Gradle的优越性，其中有一点比较明显的就是依赖开源库更加方便了，基本上一两行代码就能搞定。免去了还要手动下载自己配置的痛苦。然而，这也仅仅是对使用者而言，而对于发布这些开源库的人就苦逼了,主要是上传太痛苦。目前来说，比较常见的 Android...&hellip;</p>
          <div class="post-list__meta"><time datetime="2016-03-20 00:00:00 +0800" class="post-list__meta--date date">2016-03-20</time> &#8226; <span class="post-list__meta--tags tags">Course</span> <a class="btn-border-small" href=/course/PublishLibraryByJitPack>继续阅读</a></div>
          <hr class="post-list__divider" />
          
      </li>
    
    
    
      <li>
          <!--正常文档-->
          
          <h2 class="post-list__post-title post-title"><a href="/customview/Path_Basic" title="访问 安卓自定义View进阶-Path之基本操作">安卓自定义View进阶-Path之基本操作</a></h2>
          <p class="excerpt">在上一篇Canvas之图片文字中我们了解了如何使用Canvas中绘制图片文字，结合前几篇文章，Canvas的基本操作已经差不多完结了，然而Canvas不仅仅具有这些基本的操作，还可以更加炫酷，本次会了解到path(路径)这个Canvas中的神器，有了这个神器，就能创造出更多炫(zhuang)酷(B)的东东了。一.Path常用方法表  为了兼容性(偷懒) 本表格中去除了部分API21(即安卓版本5.0)以上才添加的方法。            作用      相关方法      备注              ...&hellip;</p>
          <div class="post-list__meta"><time datetime="2016-03-02 00:00:00 +0800" class="post-list__meta--date date">2016-03-02</time> &#8226; <span class="post-list__meta--tags tags">CustomView</span> <a class="btn-border-small" href=/customview/Path_Basic>继续阅读</a></div>
          <hr class="post-list__divider" />
          
      </li>
    
    
    
      <li>
          <!--正常文档-->
          
          <h2 class="post-list__post-title post-title"><a href="/customview/Canvas_PictureText" title="访问 安卓自定义View进阶-Canvas之图片文字">安卓自定义View进阶-Canvas之图片文字</a></h2>
          <p class="excerpt">在上一篇文章Canvas之画布操作中我们了解了画布的一些基本操作方法，本次了解一些绘制图片文字相关的内容。如果你对前几篇文章讲述的内容熟练掌握的话，那么恭喜你，本篇结束之后，大部分的自定义View已经难不倒你了，当然了，这并不是终点，接下来还会有更加炫酷的技能。一.Canvas的常用操作速查表            操作类型      相关API      备注                  绘制颜色      drawColor, drawRGB, drawARGB      使用单一颜色填充整个画布 ...&hellip;</p>
          <div class="post-list__meta"><time datetime="2016-02-12 00:00:00 +0800" class="post-list__meta--date date">2016-02-12</time> &#8226; <span class="post-list__meta--tags tags">CustomView</span> <a class="btn-border-small" href=/customview/Canvas_PictureText>继续阅读</a></div>
          <hr class="post-list__divider" />
          
      </li>
    
    
  </ol>

  <hr class="post-list__divider " />

<nav class="pagination" role="navigation">
    
        <a class="newer-posts pagination__newer btn btn-small btn-tertiary" href="/page/3/#blog">&larr; 最近</a>
    
    <span class="pagination__page-number">4 / 6</span>
    
        <a class="older-posts pagination__older btn btn-small btn-tertiary" href="/page/5/#blog">更早 &rarr;</a>
    
</nav>


</div>


            <section class="footer">
    <footer>
    	<span class="footer__copyright">本站点采用<a rel="license" href="https://creativecommons.org/licenses/by-nc-nd/4.0/deed.zh" target="_blank">知识共享 署名-非商业性使用-禁止演绎 4.0 国际 许可协议</a></span>
        <span class="footer__copyright">本站由 <a href="http://www.GcsSloop.com">@GcsSloop</a> 创建，采用 <a href="https://github.com/GcsSloop/Gcs-Vno-Jekyll" target="_blank">Gcs-Vno-Jekyll</a> 作为主题。<span id="busuanzi_container_site_pv"> 总访问量 <span id="busuanzi_value_site_pv"></span> 次</span> - &copy; 2019</span>
        <span class="footer__sitemap, footer__copyright"><a href="http://www.gcssloop.com/sitemap.xml" target="_blank">Site Map</a>
        <a href="http://www.gcssloop.com/vip" target="_blank">vip</a></span>
    </footer>
</section>

        </div>
    </div>
    
    <script type="text/javascript" src="//code.jquery.com/jquery-1.11.3.min.js"></script>

<script type="text/javascript" src="/js/highlight.pack.js"></script>
<script>hljs.initHighlightingOnLoad();</script>

<script type="text/javascript" src="/js/main.js"></script>

<script>
  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
  })(window,document,'script','https://www.google-analytics.com/analytics.js','ga');

  ga('create', 'UA-82493667-1', 'auto');
  ga('send', 'pageview');

</script>

    
  </body>

</html>
